home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Borland / Borland C++ V5.02 / EDITSDI.PAK / MISC.C < prev    next >
C/C++ Source or Header  |  1997-05-06  |  3KB  |  104 lines

  1. // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
  2. // ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
  3. // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
  4. // PARTICULAR PURPOSE.
  5. //
  6. // Copyright (C) 1993-1995  Microsoft Corporation.  All Rights Reserved.
  7. //
  8. //  MODULE:   misc.c
  9. //
  10. //  PURPOSE:  Contains all helper functions "global" to the application.
  11. //
  12. //  FUNCTIONS:
  13. //    CenterWindow - Center one window over another.
  14. //
  15. //  COMMENTS:
  16. //
  17. //
  18.  
  19. #include <windows.h>            // required for all Windows applications
  20. #include <windowsx.h>
  21.  
  22. #ifdef WIN16
  23. #include "win16ext.h"           // required only for win16 applications
  24. #endif
  25. #include "globals.h"            // prototypes specific to this application
  26.  
  27.  
  28. //
  29. //  FUNCTION: CenterWindow(HWND, HWND)
  30. //
  31. //  PURPOSE:  Center one window over another.
  32. //
  33. //  PARAMETERS:
  34. //    hwndChild - The handle of the window to be centered.
  35. //    hwndParent- The handle of the window to center on.
  36. //
  37. //  RETURN VALUE:
  38. //
  39. //    TRUE - Success
  40. //    FALSE - Failure
  41. //
  42. //  COMMENTS:
  43. //
  44. //    Dialog boxes take on the screen position that they were designed
  45. //    at, which is not always appropriate. Centering the dialog over a
  46. //    particular window usually results in a better position.
  47. //
  48.  
  49. BOOL CenterWindow(HWND hwndChild, HWND hwndParent)
  50. {
  51.     RECT    rcChild, rcParent;
  52.     int     wChild, hChild, wParent, hParent;
  53.     int     wScreen, hScreen, xNew, yNew;
  54.     HDC     hdc;
  55.  
  56.     // Get the Height and Width of the child window
  57.     GetWindowRect(hwndChild, &rcChild);
  58.     wChild = rcChild.right - rcChild.left;
  59.     hChild = rcChild.bottom - rcChild.top;
  60.  
  61.     // Get the Height and Width of the parent window
  62.     GetWindowRect(hwndParent, &rcParent);
  63.     wParent = rcParent.right - rcParent.left;
  64.     hParent = rcParent.bottom - rcParent.top;
  65.  
  66.     // Get the display limits
  67.     hdc = GetDC(hwndChild);
  68.     wScreen = GetDeviceCaps(hdc, HORZRES);
  69.     hScreen = GetDeviceCaps(hdc, VERTRES);
  70.     ReleaseDC(hwndChild, hdc);
  71.  
  72.     // Calculate new X position, then adjust for screen
  73.     xNew = rcParent.left + ((wParent - wChild) /2);
  74.     if (xNew < 0)
  75.     {
  76.          xNew = 0;
  77.     }
  78.     else if ((xNew+wChild) > wScreen)
  79.     {
  80.         xNew = wScreen - wChild;
  81.     }
  82.  
  83.     // Calculate new Y position, then adjust for screen
  84.     yNew = rcParent.top  + ((hParent - hChild) /2);
  85.     if (yNew < 0)
  86.     {
  87.         yNew = 0;
  88.     }
  89.     else if ((yNew+hChild) > hScreen)
  90.     {
  91.         yNew = hScreen - hChild;
  92.     }
  93.  
  94.     // Set it, and return
  95.     return SetWindowPos(
  96.         hwndChild,
  97.         NULL,
  98.         xNew, yNew,
  99.         0, 0,
  100.         SWP_NOSIZE | SWP_NOZORDER
  101.     );
  102. }
  103.  
  104.